const fs = require("fs");
const path = require("path");
const dayjs = require("dayjs");
const { dirPath } = require("./config");

async function createFile(articleList) {
  // 文件路径
  const filePath = `${dirPath}/${dayjs().format("HHmmss")}.json`;

  // 判断文件夹是否存在，如果不存在则创建一个空文件夹
  await dirExists(dirPath);

  // 写入数据
  fs.writeFile(filePath, JSON.stringify(articleList, "{}", 2), function (err, data) {
    if (err) {
      throw err;
    }
    console.log(`${filePath}保存成功`);
  });
}

/**
 * 路径是否存在，不存在则创建
 * @param {string} dir 路径
 */
async function dirExists(dir) {
  let isExists = await getStat(dir);

  // 路径存在
  if (isExists) {
    // 是文件夹, 返回true 否则返回false
    return isExists.isDirectory() ? true : false;
  }

  // 如果该路径不存在，获取上级路径
  let tempDir = path.parse(dir).dir;
  // 如果上级目录也不存在，则会代码会在此处递归判断
  // 直到目录存在,从上级目录层层向下创建下级目录
  let parentPathExist = await dirExists(tempDir);
  // console.log({ status, tempDir, dir });
  let mkdirStatus;
  if (parentPathExist) {
    // 父目录存在,在父目录下创建子文件夹
    mkdirStatus = await mkdir(dir);
  }
  return mkdirStatus;
}

/**
 * 读取路径
 * @param {string} path 路径
 */
function getStat(path) {
  return new Promise((resolve, reject) => {
    fs.stat(path, (err, stats) => {
      if (err) {
        resolve(false);
      } else {
        resolve(stats);
      }
    });
  });
}

/**
 * 创建文件夹
 * @param {string} dir 文件夹名
 */
function mkdir(dir) {
  return new Promise((resolve, reject) => {
    fs.mkdir(dir, (err) => {
      if (err) {
        resolve(false);
      } else {
        resolve(true);
      }
    });
  });
}

module.exports = createFile;
